home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.5)
-
- '''Dialog boxes
-
- This module handles dialog boxes. It contains the following
- public symbols:
-
- Dialog -- a base class for dialogs
-
- askinteger -- get an integer from the user
-
- askfloat -- get a float from the user
-
- askstring -- get a string from the user
- '''
- from Tkinter import *
- import os
-
- class Dialog(Toplevel):
- '''Class to open dialogs.
-
- This class is intended as a base class for custom dialogs
- '''
-
- def __init__(self, parent, title = None):
- '''Initialize a dialog.
-
- Arguments:
-
- parent -- a parent window (the application window)
-
- title -- the dialog title
- '''
- Toplevel.__init__(self, parent)
- if parent.winfo_viewable():
- self.transient(parent)
-
- if title:
- self.title(title)
-
- self.parent = parent
- self.result = None
- body = Frame(self)
- self.initial_focus = self.body(body)
- body.pack(padx = 5, pady = 5)
- self.buttonbox()
- self.wait_visibility()
- self.grab_set()
- if not self.initial_focus:
- self.initial_focus = self
-
- self.protocol('WM_DELETE_WINDOW', self.cancel)
- if self.parent is not None:
- self.geometry('+%d+%d' % (parent.winfo_rootx() + 50, parent.winfo_rooty() + 50))
-
- self.initial_focus.focus_set()
- self.wait_window(self)
-
-
- def destroy(self):
- '''Destroy the window'''
- self.initial_focus = None
- Toplevel.destroy(self)
-
-
- def body(self, master):
- '''create dialog body.
-
- return widget that should have initial focus.
- This method should be overridden, and is called
- by the __init__ method.
- '''
- pass
-
-
- def buttonbox(self):
- '''add standard button box.
-
- override if you do not want the standard buttons
- '''
- box = Frame(self)
- w = Button(box, text = 'OK', width = 10, command = self.ok, default = ACTIVE)
- w.pack(side = LEFT, padx = 5, pady = 5)
- w = Button(box, text = 'Cancel', width = 10, command = self.cancel)
- w.pack(side = LEFT, padx = 5, pady = 5)
- self.bind('<Return>', self.ok)
- self.bind('<Escape>', self.cancel)
- box.pack()
-
-
- def ok(self, event = None):
- if not self.validate():
- self.initial_focus.focus_set()
- return None
-
- self.withdraw()
- self.update_idletasks()
-
- try:
- self.apply()
- finally:
- self.cancel()
-
-
-
- def cancel(self, event = None):
- if self.parent is not None:
- self.parent.focus_set()
-
- self.destroy()
-
-
- def validate(self):
- '''validate the data
-
- This method is called automatically to validate the data before the
- dialog is destroyed. By default, it always validates OK.
- '''
- return 1
-
-
- def apply(self):
- '''process the data
-
- This method is called automatically to process the data, *after*
- the dialog is destroyed. By default, it does nothing.
- '''
- pass
-
-
-
- class _QueryDialog(Dialog):
-
- def __init__(self, title, prompt, initialvalue = None, minvalue = None, maxvalue = None, parent = None):
- if not parent:
- import Tkinter
- parent = Tkinter._default_root
-
- self.prompt = prompt
- self.minvalue = minvalue
- self.maxvalue = maxvalue
- self.initialvalue = initialvalue
- Dialog.__init__(self, parent, title)
-
-
- def destroy(self):
- self.entry = None
- Dialog.destroy(self)
-
-
- def body(self, master):
- w = Label(master, text = self.prompt, justify = LEFT)
- w.grid(row = 0, padx = 5, sticky = W)
- self.entry = Entry(master, name = 'entry')
- self.entry.grid(row = 1, padx = 5, sticky = W + E)
- if self.initialvalue:
- self.entry.insert(0, self.initialvalue)
- self.entry.select_range(0, END)
-
- return self.entry
-
-
- def validate(self):
- import tkMessageBox
-
- try:
- result = self.getresult()
- except ValueError:
- tkMessageBox.showwarning('Illegal value', self.errormessage + '\nPlease try again', parent = self)
- return 0
-
- if self.minvalue is not None and result < self.minvalue:
- tkMessageBox.showwarning('Too small', 'The allowed minimum value is %s. Please try again.' % self.minvalue, parent = self)
- return 0
-
- if self.maxvalue is not None and result > self.maxvalue:
- tkMessageBox.showwarning('Too large', 'The allowed maximum value is %s. Please try again.' % self.maxvalue, parent = self)
- return 0
-
- self.result = result
- return 1
-
-
-
- class _QueryInteger(_QueryDialog):
- errormessage = 'Not an integer.'
-
- def getresult(self):
- return int(self.entry.get())
-
-
-
- def askinteger(title, prompt, **kw):
- '''get an integer from the user
-
- Arguments:
-
- title -- the dialog title
- prompt -- the label text
- **kw -- see SimpleDialog class
-
- Return value is an integer
- '''
- d = _QueryInteger(title, prompt, **kw)
- return d.result
-
-
- class _QueryFloat(_QueryDialog):
- errormessage = 'Not a floating point value.'
-
- def getresult(self):
- return float(self.entry.get())
-
-
-
- def askfloat(title, prompt, **kw):
- '''get a float from the user
-
- Arguments:
-
- title -- the dialog title
- prompt -- the label text
- **kw -- see SimpleDialog class
-
- Return value is a float
- '''
- d = _QueryFloat(title, prompt, **kw)
- return d.result
-
-
- class _QueryString(_QueryDialog):
-
- def __init__(self, *args, **kw):
- if kw.has_key('show'):
- self._QueryString__show = kw['show']
- del kw['show']
- else:
- self._QueryString__show = None
- _QueryDialog.__init__(self, *args, **kw)
-
-
- def body(self, master):
- entry = _QueryDialog.body(self, master)
- if self._QueryString__show is not None:
- entry.configure(show = self._QueryString__show)
-
- return entry
-
-
- def getresult(self):
- return self.entry.get()
-
-
-
- def askstring(title, prompt, **kw):
- '''get a string from the user
-
- Arguments:
-
- title -- the dialog title
- prompt -- the label text
- **kw -- see SimpleDialog class
-
- Return value is a string
- '''
- d = _QueryString(title, prompt, **kw)
- return d.result
-
- if __name__ == '__main__':
- root = Tk()
- root.update()
- print askinteger('Spam', 'Egg count', initialvalue = 144)
- print askfloat('Spam', 'Egg weight\n(in tons)', minvalue = 1, maxvalue = 100)
- print askstring('Spam', 'Egg label')
-
-